import axios from 'axios';
// import {stringify} from 'qs';
import md5 from 'md5';
import getUserInfo, { UserInfo } from './getUserInfo';
import { jsonp } from './util';
// @ts-ignore
axios.jsonp = jsonp;
const testHost = '//teststars.sparta.html5.qq.com/';
const releaseHost = 'https://stars.news.qq.com/';
const currentHost = location.hostname === 'new.qq.com' || location.hostname === 'news.qq.com' ? releaseHost : testHost;
axios.defaults.headers.post['Content-Type'] = 'application/json';
// axios.defaults.withCredentials=true;
// axios.interceptors.request.use(config => {
//     if (config.method === 'post') {
//         config.data = stringify(config.data, {arrayFormat: 'repeat'});
//     }
//     return config;
// });
function getRandom(openid: string) {
  let code = '';
  for (let i = 0;i < 6;i++) {
    code += Math.floor(Math.random() * 10);
  }
  return {
    code,
    skey: md5(openid + code),
  };
}
// ====__1：用户写入接口__=============================
// skey加密规则：openid+123456(随机数); 例如：openid:"aaaaa"+随机数：123Rdo
// __1：用户写入接口__
// 测试url：http://teststars.sparta.html5.qq.com/?service=App.Answer_FoundAParty.register
// 正式url：https://stars.news.qq.com/?service=App.Answer_FoundAParty.register

// 请求方式：post

// ||~参数名称||~是否必传||~说明||~限制||
// || openid|| 是 || 唯一标志 ||大于20位，不能有特殊字符 ||
// || name|| 是 ||名称 ||无 ||
// || head|| 是 || 头像 ||无 ||
// ||  code|| 是 || 前端随机生成的code ||
// ||  skey|| 是 || 前端通过md5加密得到的串码||

// 返回的示例：

// ```
// {
//     "ret": 200,
//     "data": {
//         "code": 200,
//         "msg": "ok"
//     },
//     "msg": ""
// }
// ```
export async function register() {
  const userInfo = await getUserInfo() as UserInfo;
  const { code, skey } = getRandom(userInfo.openid);
  console.log({
    openid: userInfo.openid,
    name: userInfo.nickname,
    head: userInfo.headimgurl,
    code, skey,
  });
  const { data } = await axios.post(`${currentHost}?service=App.Answer_FoundAParty.register`, {
    openid: userInfo.openid,
    name: userInfo.nickname,
    head: userInfo.headimgurl,
    type: userInfo.account,
    code, skey,
  });
  return data;
}
// ====__2：创建小组__=============================
// __2：创建小组__
// 测试url：http://teststars.sparta.html5.qq.com/?service=App.Answer_FoundAParty.createGroup
// 正式url：https://stars.news.qq.com/?service=App.Answer_FoundAParty.createGroup

// 请求方式：post
// ||~参数名称||~是否必传||~说明||
// || openid|| 是 || 唯一标志 ||大于20位，不能有特殊字符 ||
// || name|| 是 ||名称 ||无 ||
// || typeid|| 是 || 领誓人id ||无 ||
// ||  code|| 是 || 前端随机生成的code ||
// ||  skey|| 是 || 前端通过md5加密得到的串码 headers中 携带||

// 返回示例：

// ```
// {
//     "ret": 200,
//     "data": {
//         "code": 200,
//         "groupId": "181651622454639",   //分组id
//         "msg": "创建成功"
//     },
//     "msg": ""
// }
// ```
export async function createGroup(typeid: number) {
  const userInfo = await getUserInfo() as UserInfo;
  const { code, skey } = getRandom(userInfo.openid);
  const { data } = await axios.post(`${currentHost}?service=App.Answer_FoundAParty.createGroup`, {
    openid: userInfo.openid,
    name: userInfo.nickname,
    type: userInfo.account,
    typeid, code, skey,
  });
  return data;
}
// ====__3：助力接口__=============================
// __3：助力接口__
// 测试url：http://teststars.sparta.html5.qq.com/?service=App.Answer_FoundAParty.setShareUser
// 正式url：https://stars.news.qq.com/?service=App.Answer_FoundAParty.setShareUser

// 请求方式：post
// ||~参数名称||~是否必传||~说明||
// ||  other_openid|| 是 || 主态标志 ||
// || current_openid|| 是 || 客态标志||
// || groupId|| 是 || 分组id||
// ||  code|| 是 || 前端随机生成的code ，只可以使用一次  ||
// ||  skey|| 是 || 前端通过md5加密得到的串码|

// 返回示例：

// ```
// {
//     "ret": 200,
//     "data": {
//         "code": 1008,
//         "message": "已经助力"
//     },
//     "msg": ""
// }
// ```
export async function setShareUser(joinData: {groupId: string, groupOpenId: string, groupOpenidType: string}) {
  const userInfo = await getUserInfo() as UserInfo;
  const { code, skey } = getRandom(userInfo.openid);
  const { data } = await axios.post(`${currentHost}?service=App.Answer_FoundAParty.setShareUser`, {
    other_openid: joinData.groupOpenId,
    current_openid: userInfo.openid,
    groupId: joinData.groupId,
    currentType: userInfo.account,
    otherType: joinData.groupOpenidType,
    code, skey,
  });
  return data;
}
// ====__4：获取当前用户__=============================
// __4：获取当前用户__
// 测试url：http://teststars.sparta.html5.qq.com/?service=App.Answer_FoundAParty.getUserInfo
// 正式url：https://stars.news.qq.com/?service=App.Answer_FoundAParty.getUserInfo

// 请求方式：get
// ||~参数名称||~是否必传||~说明||
// ||  openid|| 是 || 唯一标志 ||
// || groupstart|| 是 || 分组开始||
// || groupend|| 是 || 分组结束，最多300||
// || start|| 是 || 开始||
// || end|| 是 || 结束，最多300||

// 返回示例：

// ```
// {
//     "ret": 200,
//     "data": {
//         "user": {			//	用户信息
//             "openid": "o04Jg0_HFO6V-aeb0e0u8WmnWt_M",
//             "name": "星空",
//             "head": "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqvXS0RSAmxy1TEe0yclSLICK13eU4UFEBFibLAZlsSdBJQ5LDp7Y7DnoibSOCALNb02LnsibicY2SZlA/132"
//         },
//         "grouplist": [			//分组信息
//             {
//                 "groupId": "993211622453097",
//                 "name": "杨利伟",
//                 "`typeid`": 0,
//                 "time": "2021-05-31 17:24:57",
//                 "count": 1
//             },
//             {
//                 "groupId": "352361622452715",
//                 "`typeid`": 1,
//                 "image": "",
//                 "time": "2021-05-31 17:18:35",
//                 "count": 2
//             }
//         ],
//         "groupId": "352361622452715",		//分组id
//         "userList": {		//邀请的列表
//             "userList": [
//                 {
//                     "groupId": "352361622452715",
//                     "name": "星空1",
//                     "image": "",
//                     "id": "0",
//                     "text": "不忘初心，牢记使命",
//                     "time": "2021-05-31 17:24:52"
//                 },
//                 {
//                     "groupId": "352361622452715",
//                     "name": "星空",
//                     "image": "",
//                     "id": "0",
//                     "text": "不忘初心，牢记使命",
//                     "time": "2021-05-31 17:18:35"
//                 }
//             ],
//             "count": 2
//         },
//         "deponent": 18			//全国宣誓人
// 				"typeid": 0
//     },
//     "msg": ""
// }
// ```
export async function getListInfo(listData: {
  openid: string,
  groupId?: string,
  groupstart?: number,
  groupend?: number,
  start?: number,
  type?: string,
  end?: number,
}): Promise<GroupInfo> {
  const LIST_DATA = listData;
  if (!LIST_DATA.type) {
    const userInfo = await getUserInfo() as UserInfo;
    LIST_DATA.type = userInfo.account;
  }
  const { data } = await axios.get(`${currentHost}?service=App.Answer_FoundAParty.getUserInfo`, {
    params: { ...Object.assign({
      type: LIST_DATA.type,
      groupstart: 0,
      groupend: 3,
      start: 0,
      end: 7,
    }, LIST_DATA) },
  });
  return data;
}
// ====__5：获取当前用户状态__=============================
// __4：获取当前用户__
// 测试url：http://teststars.sparta.html5.qq.com/?service=App.Answer_FoundAParty.getState
// 正式url：https://stars.news.qq.com/?service=App.Answer_FoundAParty.getState

// 请求方式：get
export async function getState(groupId?: string, openid?: string) {
  const userInfo = await getUserInfo() as UserInfo;
  let res: any;
  if (groupId) {
    res = await axios.get(`${currentHost}?service=App.Answer_FoundAParty.getState`, {
      params: {
        openid: openid || userInfo.openid,
        type: userInfo.account,
        groupId,
      },
    });
  } else {
    res = await axios.get(`${currentHost}?service=App.Answer_FoundAParty.getState`, {
      params: {
        openid: openid || userInfo.openid,
        type: userInfo.account,
      },
    });
  }
  return res.data;
}
export interface GroupInfo extends ServerInfo{
  data: {
    user: {	//	用户信息
      openid: string;
      name: string;
      head: string;
    },
    // 分组信息
    grouplist: {
      list: {
        groupId: string;
        typeid: number;
        time: string;
        count: number;
      }[];
      count: number;
    };
    // 邀请的列表
    userList: {
      list: {
        name: string;
        image: string;
        textid: number;// 0-21
        time: string;
      }[];
      count: number
    },
    groupId: string;
    time: string;
    typeid: number;
  }
}
export interface ServerInfo{
  msg: string;
  ret: number;
}

const base64Cache: {
  [key: string]: string;
} = {};
// base64 to url
export async function getURL(base64: string) {
  const md5Name = md5(base64);
  if (base64Cache[md5Name]) {
    return base64Cache[md5Name];
  }
  const { data } = await axios.post('https://yc.static.qq.com/?service=App.Uplode_Uplode.uploads', {
    uploads: base64,
  }, {
    transformRequest: [
      function (data) {
        let ret = '';
        Object.keys(data).forEach((it) => {
          ret += `${encodeURIComponent(it)}=${encodeURIComponent(data[it])}&`;
        });
        ret = ret.substring(0, ret.lastIndexOf('&'));
        return ret;
      },
    ],
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
  });
  if (+data.ret === 200 && +data.data.code === 0) {
    base64Cache[md5Name] = data.data.url;
    return data.data.url;
  }
  return base64;
}
// ===无为接口=======================================
interface WuweiParams{
  /* 默认为 新闻产品业务部/设计中心 的 appid */
  appid?: string;
  /* 默认为 新闻产品业务部/设计中心 的 masterkey */
  masterkey?: string;
  schemaid: string;
}
export async function getWuwei(params: WuweiParams) {
  // 新闻产品业务部/设计中心的 masterkey 和 appid
  if (!params.masterkey) params.masterkey = 'e80e3c4672c542449190951199df0f85';
  if (!params.appid) params.appid = 'qqnews_design';
  const { data } = await axios.get(`${currentHost}?service=App.Answer_WuweiTemplate.index`, {
    params,
  });
  if (data.ret === 200 && data.data.code === 200) {
    return data.data.data;
  }
  throw new Error(data);
}
